<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    hasOwnProperty ：  在 Object.prototype, 判断某个属性，是不是某个对象私有

    公有和私有是相对的

    hasPubProperty----》判断某个属性，是不是某个对象公有

    <script>
        //1. 一定要是该对象的属性（私有 和 公有）
        //2. 不是私有
        //缺点：如果一个属性即是私有也是公有，就判断不出来
        // Object.prototype.hasPubProperty=function hasPubProperty(attr){
        //     //1.this---f    //2.参数  atrr---"name"/"num"/"toString"
        //     if(attr in this){//一定要是该对象的属性
        //        if(this.hasOwnProperty(attr)){//判断 是不是私有
        //           return false;
        //        }else{
        //           return true;
        //        }
        //     }
        //     return false;
        // }

        // //1.只要是公有区上存在，就是公有
        // Object.prototype.hasPubProperty=function hasPubProperty(attr){
        //     //this-->f
        //     //console.log(f.__proto__,"111");//Fn.prototype
        //     //f.__proto__   IE无法使用__proto__ 
        //     //Object.getPrototypeOf(XXX) 静态方法 查找XXX的原型对象
        //     //let proto=this.__proto__;

        //     let proto=Object.getPrototypeOf(this);

        //     if(attr in proto){
        //         return true;
        //     }else{
        //         return false;
        //     }
        // }


           //1.只要是公有区上存在，就是公有
           Object.prototype.hasPubProperty=function hasPubProperty(attr){
            //this-->f
            let proto=Object.getPrototypeOf(this);//Fn.prototype
    
            while(proto){//Fn.prototype(true) Object.prototype(true)  null(false)
               if(proto.hasOwnProperty(attr)){
                  return true;
               }
              //找下一个原型对象
              // proto=Object.getPrototypeOf(Fn.prototype);//Object.prototype
              // proto=Object.getPrototypeOf(Object.prototype);//null
               proto=Object.getPrototypeOf(proto);
            }

            return false;
          }

        function Fn(name,age){
            this.name=name;
            this.age=age;
        }

        Fn.prototype.num=100;
        Fn.prototype.name="利达";
        let f=new Fn("lisa",30);
        console.log(f);

        console.log(f.hasPubProperty("aaa"));//false
        console.log(f.hasPubProperty("name"));//true
        console.log(f.hasPubProperty("num"));//true
        console.log(f.hasPubProperty("toString"));//true
    </script>
    <script>
        //  var obj={
        //     name:"lili",
        //     age:18
        //  }

        //  console.log(obj);

        //  console.log(obj.hasOwnProperty("name"))//true
        //  console.log(obj.hasOwnProperty("toString"))//false


        // function Fn(name,age){
        //     this.name=name;
        //     this.age=age;
        // }

        // Fn.prototype.num=100;
        // let f=new Fn("lisa",30);
        // console.log(f);

        // // console.log(f.hasOwnProperty("name"));//true
        // // console.log(f.hasOwnProperty("num"));//false
        // // console.log(f.hasOwnProperty("toString"));//false

        // console.log(Fn.prototype.hasOwnProperty("num"));//true
        // console.log(Fn.prototype.hasOwnProperty("toString"));//false
    </script>
</body>
</html>